import numpy as np

t1=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])
print(t1)
print(t1.shape)

#reshape方法的调用者既可以是np,也可以是某个具体的ndarray,reshpae操作是有返回值的操作，不会对数据本身进行修改
t2=np.reshape(t1,(t1.shape[0]*t1.shape[1],))#如果是np.reshape的话，第一个参数必须是被reshape的那个数组
print(t2)
t3=t1.reshape((t1.shape[0]*t1.shape[1]))
print(t3)

#把二维数组转换成一维数组还可以用flatten()方法，该方法的调用者是ndarry
t4=t1.flatten()
print(t4)

#numpy的广播机制：一个数组可以直接对一个数进行加减乘数，得到的结果是原数组的所有元素对这个数加减乘除后返回的新数组
t5=t1+10
print(t5)

#多个ndarry进行加减乘除，得到的结果是对应位置相加减乘除，这和线性代数矩阵能的乘法不同
t6=t1*t5
print(t6)

#数组的转置：np.transpose()方法或者ndarray.transpose()
a1=np.array([[11,22,33,44,55],[66,77,88,99,100],[110,120,130,140,150]])
print("********************a1*********************************")
print(a1)
a2=a1.transpose()
print("********************a2*********************************")
print(a2)
a3=np.transpose(a1)
print("********************a3*********************************")
print(a3)
print("********************a1.T*********************************")
print(a1.T)

#数组的索引和切片操作
indexArr1=np.arange(36).reshape((6,6))
print("********************indexArr*********************************")
print(indexArr1)
print("********************取出indexArr的第3到5行*********************************")
print(indexArr1[2:5,:])
print("********************取出indexArr第2到4行(包含第4行)，第1到5列*********************************")
print(indexArr1[1:4,0:5])
print("********************取出indexArr第2到3列的所有行*********************************")
print(indexArr1[:,1:3])
print("********************取出indexArr中的8,9,20，28,32*********************************")
print(indexArr1[[1,1,3,4,5],[2,3,2,4,2]])




#1.求和方法：np.sum(ndarray,axis)
ans1=np.sum(indexArr1,axis=0)
print("********************np.sum(indexArr1,axis=0)的结果，也就是对所有列单独求和的结果是：*********************************")
print(ans1)
#从结果可以看出，np.sum(ndarray,axis=0)是将数组按照结果为行的格式打印出来的，也就是说，是对每一列进行求和，求和后的所有列的和组成的行为ans数组

ans2=np.sum(indexArr1,axis=1)
print("********************np.sum(indexArr1,axis=1)的结果，也就是对所有行单独求和的结果是：*********************************")
print(ans2)

#所以要对某一列或者某一行求和，只需要先调用np.sum(ndarray,axis=0||1)就行求和，再进行切片操作即可
#例如，求第3行的元素之和：
print("********************对indexArr的第三行元素之和为：*********************************")
print(np.sum(indexArr1,axis=1)[2])

